package com.meatball.dji.common.mqtt.handler.device.data.dto

import com.alibaba.fastjson2.annotation.JSONField

/**
 * TODO 设备拓扑更新参数
 *
 * @see com.meatball.dji.common.mqtt.data.model.ConfigModel
 *
 * @author 张翔宇
 * @since 2024年4月28日
 */
data class UpdateTopologyParams(
    val tid: String,
    val bid: String,
    val timestamp: Long = System.currentTimeMillis(),
    val gateway: String,
    val method: String,
    val data: Data
) {
    /**
     * TODO 数据类
     *
     * @property domain 网关设备的命名空间
     *      @see https://developer.dji.com/doc/cloud-api-tutorial/cn/overview/product-support.html
     * @property type 网关设备的产品类型
     *      @see https://developer.dji.com/doc/cloud-api-tutorial/cn/overview/product-support.html
     * @property subType 网关子设备的产品子类型
     *      @see https://developer.dji.com/doc/cloud-api-tutorial/cn/overview/product-support.html
     * @property deviceSecret 网关设备的密钥
     * @property nonce nonce
     * @property thingVersion 网关设备的物模型版本
     * @property subDevices 子设备列表
     */
    data class Data(
        val domain: String,
        val type: Int,
        @field:JSONField(name = "sub_type")
        val subType: Int,
        @field:JSONField(name = "device_secret")
        val deviceSecret: String,
        val nonce: String,
        @field:JSONField(name = "thing_version")
        val thingVersion: String,
        @field:JSONField(name = "sub_devices")
        val subDevices: List<SubDevices>
    ) {
        /**
         * TODO 子设备信息
         *
         * @property sn 子设备序列号（SN）
        *  @property domain 网关设备的命名空间
         *      @see https://developer.dji.com/doc/cloud-api-tutorial/cn/overview/product-support.html
         * @property type 网关设备的产品类型
         *      @see https://developer.dji.com/doc/cloud-api-tutorial/cn/overview/product-support.html
         * @property subType 网关子设备的产品子类型
         *      @see https://developer.dji.com/doc/cloud-api-tutorial/cn/overview/product-support.html
         * @property deviceSecret 网关设备的密钥
         * @property nonce nonce
         * @property thingVersion 网关设备的物模型版本
         */
        data class SubDevices(
            val sn: String,
            val domain: String,
            val type: Int,
            @field:JSONField(name = "sub_type")
            val subType: Int,
            @field:JSONField(name = "device_secret")
            val deviceSecret: String,
            val nonce: String,
            @field:JSONField(name = "thing_version")
            val thingVersion: String
        )
    }
}
